package com.zuser.project.util;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.HashMap;
import java.util.Map;


public class CommonService<T, V extends IService<T>> {

    private final V service;

    // 构造方法，注入具体的 Service 实现类
    public CommonService(V service) {
        this.service = service;
    }

    /**
     * 通用分页查询方法
     *
     * @param params 分页参数，包含 "page" 和 "limit"
     * @return 返回分页结果
     */
    public R queryPage(Map<String, Object> params) {
        try {
            System.out.println("获取数据成功");

            // 校验分页参数
            if (!params.containsKey("page") || !params.containsKey("limit")) {
                return R.error("分页参数缺失，请提供 page 和 limit");
            }
            // 创建查询条件包装器
           QueryWrapper<T> queryWrapper = new  QueryWrapper<>();

            if (params.get("nickname") != null&&params.get("nickname") != "") {
                queryWrapper.eq("nickname",params.get("nickname"));
            }
            if (params.get("driverId") != null&&params.get("driverId") != "") {
                queryWrapper.eq("driver_id",params.get("driverId"));
            }
            if (params.get("id") != null&&params.get("id") != "") {
                queryWrapper.eq("id",params.get("id"));
            }
            if (params.get("totalAmount")!=""&&params.get("totalAmount")!=null)
            {
                queryWrapper.eq("total_amount",params.get("totalAmount"));
            }
            if (params.get("status")!=""&&params.get("status")!=null)
            {
                queryWrapper.eq("status",params.get("status"));
            }
            if (params.get("createTime")!=""&&params.get("createTime")!=null)
            {
                queryWrapper.eq("create_time",params.get("createTime"));
            }
            if (params.get("updateTime")!=""&&params.get("updateTime")!=null)
            {
                queryWrapper.eq("update_time",params.get("updateTime"));
            }
            // 创建分页对象
            int currentPage = Integer.parseInt(params.get("page").toString());
            int pageSize = Integer.parseInt(params.get("limit").toString());
            Page<T> pageObj = new Page<>(currentPage, pageSize);


            // 使用注入的 service 进行分页查询
            IPage<T> page = service.page(pageObj, queryWrapper);

            // 构造返回结果
            Map<String, Object> resultMap = new HashMap<>();
            resultMap.put("list", page.getRecords()); // 当前页的数据列表
            resultMap.put("totalCount", page.getTotal()); // 总记录数

            return R.ok("获取数据成功").put("page", resultMap);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("获取数据失败：" + e.getMessage());
        }
    }
}